#include <iostream>
#include <pthread.h>
#include <unistd.h>

using namespace std;

// 全局互斥锁，无需手动初始化和销毁
pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;

void* threadRoutine(void* args)
{
    cout << "我是次线程，我开始运行了" << endl;

    // 申请锁
    pthread_mutex_lock(&mtx);
    cout << "我是次线程，我申请到了一把锁" << endl;

    // 在不释放锁的情况下，再次申请锁，陷入 死锁 状态
    pthread_mutex_lock(&mtx);
    cout << "我是次线程，我又再次申请到了一把锁" << endl;

    pthread_mutex_unlock(&mtx);

    return nullptr;
}

int main()
{
    pthread_t t;
    pthread_create(&t, nullptr, threadRoutine, nullptr);

    // 等待次线程先跑
    sleep(3);

    // 主线程帮忙释放锁
    pthread_mutex_unlock(&mtx);
    cout << "我是主线程，我已经帮次线程释放了一把锁" << endl;

    // 等待次线程后续动作
    sleep(3);

    pthread_join(t, nullptr);
    cout << "线程等待成功" << endl;
    return 0;
}
